/*
 * System.h
 *
 *  Created on: 23 May 2011
 *      Author: allan
 */

#ifndef SYSTEM_H_
#define SYSTEM_H_

// C++ includes
#include <iostream>
using namespace std;

// Eigen includes
#include <Eigen/Dense>
using namespace Eigen;

// GeoReact includes
#include "MultiPhase.h"
#include "Reaction.h"
#include "Utils.h"

class System : public MultiPhase
{
public:
	System();
	
	System(const vector<PhasePtr>& phases, const vector<ReactionPtr>& reactions);
	
	/// --- Getter methods --- ///
	const StringVector&
	GetPrimarySpecies() const;
	
	const StringVector&
	GetSecondarySpecies() const;
	
	const vector<ReactionPtr>&
	GetReactions() const;
	
	friend ostream& 
	operator<<(ostream& out, const System& system);
	
private:
	vector<PhasePtr> phases;
	
	vector<ReactionPtr> reactions;
	
	StringVector primarySpecies, secondarySpecies;
};

#endif /* SYSTEM_H_ */
